package com.yyge.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 数据库连接池
 * 每次使用jdbc之前需要通过DriverManager建立连接，用完后还必须要关闭连接
 * 连接的创建和关闭比较耗时；为了提高程序执行效率
 * 提前的将多个连接缓存到连接池中，当需要使用时从连接池中取一个连接，当用完后，将连接放回连接池
 */
public class DruidDataSourceHandler {
    private static final Properties PROPERTIES;
    private static Logger logger = LoggerFactory.getLogger(DruidDataSourceHandler.class);
    static{
        // 从classpath路径下获取jdbc配置文件
        final String PATH = "global.properties";
        PROPERTIES = new Properties();
        InputStream inputStream = DruidDataSourceHandler.class.getClassLoader().getResourceAsStream(PATH);
        // 加载字节输入流，将配置文件转换为键值对的映射
        try {
            PROPERTIES.load(inputStream);
            logger.debug("将jdbc.properties文件转换为Properties对象");
        } catch (IOException e) {
            // 将错误信息输出到错误日志
            logger.error(e.getMessage());
            //e.printStackTrace();
        }

    }

    /**
     * 获取连接池
     * @return
     */
    public static DataSource getDataSource(){
        DataSource dataSource = null;
        try {
            dataSource = DruidDataSourceFactory.createDataSource(PROPERTIES);
            logger.debug("根据jdbc.properties文件创建连接池成功");
        } catch (Exception e) {
            // e.printStackTrace();
            logger.error(e.getMessage());
        }
        return dataSource;
    }
}
